﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AvaProvi
{
    [Serializable]
    public class clsAnalisisFisico
    {
        public clsTerreno_CRN  Terreno { get; set; }

        //Datos de terreno
        public double SuperficieTotalTerreno
        {
            get
            {
                double dbSuperficie = 0;
                foreach (clsFraccionDeTerreno_CRN objFraccion in this.Terreno.FraccionesDeTerreno)
                {
                    dbSuperficie += objFraccion.Superficie;
                }
                return dbSuperficie;
            }
        }
        public double ValorParcialTerreno
        {
            get
            {
                double dbValorParcial = 0;
                foreach (clsFraccionDeTerreno_CRN objFraccion in this.Terreno.FraccionesDeTerreno)
                {
                    if(objFraccion.Superficie > 0)
                        dbValorParcial += objFraccion.ValorParcial;
                }
                return dbValorParcial;
            }
        }

        //Datos de las construcciones
        public decimal SuperficieDeConstrucciones
        {
            get
            {
                decimal dbSuperficieTotal = 0;
                foreach (clsTipoDeConstruccion_CRN objConstruccion in this.Terreno.Construccion.TiposDeConstruccion)
                {
                    dbSuperficieTotal += objConstruccion.Superficie;
                }
                return dbSuperficieTotal;
            }
        }
        public double ValorTotalAsegurableDeConstruc
        {
            get
            {
                double dbValorTotal = 0;
                foreach (clsTipoDeConstruccion_CRN objConstruccion in this.Terreno.Construccion.TiposDeConstruccion)
                {
                    dbValorTotal += objConstruccion.ValorAsegurable;
                }
                return dbValorTotal;
            }
        }
        public decimal ValorParcialDeConstrucciones
        {
            get
            {
                decimal dbValorParcial = 0;
                foreach (clsTipoDeConstruccion_CRN objConstruccion in this.Terreno.Construccion.TiposDeConstruccion)
                {
                    dbValorParcial += objConstruccion.ValorParcial;
                }
                return dbValorParcial;
            }
        }

        public double SuperficieAccesoriaTotal
        {
            get
            {
                double dbSuperficieAccesoria = 0;
                foreach (clsSuperficieAccesoria_CRN objSuperficie in this.Terreno.SuperficiesAccesorias)
                {
                    dbSuperficieAccesoria += objSuperficie.SuperficieM2;
                }
                return dbSuperficieAccesoria;
            }
        }
        public double ValorTotalAsegurableDeSupAccesoria
        {
            get
            {
                double dbValor = 0;
                foreach (clsSuperficieAccesoria_CRN objSuperficie in this.Terreno.SuperficiesAccesorias)
                {
                    dbValor += objSuperficie.ValorAsegurable;
                }
                return dbValor;
            }
        }
        public double ValorParcialDeSupAccesoria
        {
            get
            {
                double dbValor = 0;
                foreach (clsSuperficieAccesoria_CRN objSuperficie in this.Terreno.SuperficiesAccesorias)
                {
                    dbValor += objSuperficie.ValorParcial;
                }
                return dbValor;
            }
        }

        public double SuperficieVendible
        {
            get
            {
                return Convert.ToDouble(this.SuperficieDeConstrucciones) + this.SuperficieAccesoriaTotal;
            }
        }
        public double ValorTotalDeConstruccion
        {
            get
            {
                return Convert.ToDouble(this.ValorParcialDeConstrucciones) + this.ValorParcialDeSupAccesoria;
            }
        }

        //Datos de Áreas Comunes
        public double ValorTotalAsegurableDeAreasC
        {
            get
            {
                double dbValor = 0;
                foreach (clsAreaComun_CRN objArea in this.Terreno.AreasComunes)
                {
                    dbValor += objArea.ValorAsegurable;
                }
                return dbValor;
            }
        }
        public double ValorParcialDeAreasComunes
        {
            get
            {
                double dbValor = 0;
                foreach (clsAreaComun_CRN objArea in this.Terreno.AreasComunes)
                {
                    dbValor += objArea.ValorParcial;
                }
                return dbValor;
            }
        }

        //Resultado del análisis
        public double ResultadoDeAnalisis
        {
            get
            {
                return this.ValorParcialTerreno + this.ValorTotalDeConstruccion + this.ValorParcialDeAreasComunes;
            }
        }
        public double ResultadoPorFactorAjuste { get { return this.ResultadoDeAnalisis * this.Terreno.FactorAjuste; } }

        public clsAnalisisFisico(clsTerreno_CRN objTerreno)
        {
            this.Terreno = objTerreno;
        }
    }
}
